package schema

import "database/sql"

type TableDBSchema struct {
	TableName    string `db:"TABLE_NAME"`
	TableComment string `db:"TABLE_COMMENT"`
}

type ColumnDBSchema struct {
	TableCatalog           string         `db:"TABLE_CATALOG"`
	TableSchema            string         `db:"TABLE_SCHEMA"`
	TableName              string         `db:"TABLE_NAME"`
	ColumnName             string         `db:"COLUMN_NAME"`
	OrdinalPosition        int            `db:"ORDINAL_POSITION"`
	ColumnDefault          sql.NullString `db:"COLUMN_DEFAULT"`
	IsNullable             string         `db:"IS_NULLABLE"`
	DataType               string         `db:"DATA_TYPE"`
	CharacterMaximumLength sql.NullInt32  `db:"CHARACTER_MAXIMUM_LENGTH"`
	CharacterOctetLength   sql.NullInt32  `db:"CHARACTER_OCTET_LENGTH"`
	NumericPrecision       sql.NullString `db:"NUMERIC_PRECISION"`
	NumericScale           sql.NullString `db:"NUMERIC_SCALE"`
	DatetimePrecision      sql.NullString `db:"DATETIME_PRECISION"`
	CharacterSetName       sql.NullString `db:"CHARACTER_SET_NAME"`
	CollationName          sql.NullString `db:"COLLATION_NAME"`
	ColumnType             string         `db:"COLUMN_TYPE"`
	ColumnKey              string         `db:"COLUMN_KEY"`
	Extra                  string         `db:"EXTRA"`
	Privileges             string         `db:"PRIVILEGES"`
	ColumnComment          string         `db:"COLUMN_COMMENT"`
	GenerationExpression   string         `db:"GENERATION_EXPRESSION"`
}
type ColumnRuleSchema struct {
	NoEdit   bool // UI字段 => 无编辑
	NoList   bool // UI字段 => 无列表
	NoAdd    bool // UI字段 => 无新增
	NoDelete bool // UI字段 => 无删除

	Width               int    // 列表宽度
	Require             bool   // 必填
	Search              bool   // 搜索条件
	SearchMultiple      bool   // 多个搜索项目
	ShowOverflowTooltip bool   // 提示显示全文
	Align               string // 列表对齐方式
	Fixed               string // 列表固定
	IsImg               bool   // 图片字段
	IsAtt               bool   // 附件字段
	IsSwitch            bool   // 开关字段
	Dict                string // 系统字典
	Dictbiz             string // 业务字典
	IgnoreCodegen       bool   // 不进行代码生成
}

type TableOpts struct {
	IgnoreCodegen       bool   // 忽略代码生成
	Mod                 string // 模块
	Table               string // 表名
	UpperTable          string // 表名(首字母大写)
	TableComment        string // 中文名
	FullTableName       string // 全表名 = 模块_表名
	UpperCamelCaseTable string // 大驼峰全表名

	LblField string // 用于显示的字段

	NoEdit   bool // UI => 无编辑
	NoList   bool // UI => 无列表
	NoAdd    bool // UI => 无新增
	NoDelete bool // UI => 无删除
}

type TableColumn struct {
	SrcProps string // 源码显示字段名
	SrcType  string // 源码显示字段类型
	ColumnDBSchema
	ColumnRuleSchema
}

type TableConfigItem struct {
	Opts    TableOpts
	Columns []TableColumn
}
